/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
#include <vector>
#include <set>
#include <queue>

using namespace std;

class Solution
{
public:
    int findSecondMinimumValue(TreeNode *root)
    {
        queue<TreeNode*> qu;
        set<int> res;
        qu.push(root);

        //层序遍历，并将节点值保存到set 树结构中。
        while(!qu.empty())
        {
            TreeNode *tmp = qu.front();
            qu.pop();
            if(tmp->left)
                qu.push(tmp->left);
            if(tmp->right)
                qu.push(tmp->right);
            res.insert(tmp->val);
        }

        //完成遍历
        auto iter = res.begin();
        if(res.size()>1) //有多个值
            return *(++iter);
        else
            return -1;
    }
};